جزوه · چالش‌های فصل اول: ذخیره خروجی در فایل بازگشت به فهرست
📘 چالش‌های فصل اول ذخیره خروجی یک دستور در فایل
📅 تاریخ: ۱۹ مرداد ۱۴۰۵ 👤 مدرس: محمد عابدینی 🐚 Zsh · 🐧 Debian

▍ مقدمه

یکی از مهارت‌های پایه در لینوکس، ذخیره خروجی یک دستور در یک فایل است. این کار با استفاده از عملگرهای انتقال (Redirection Operators) انجام می‌شود.

🔑 سه عملگر اصلی:
  • > → بازنویسی فایل (محتوای قبلی پاک می‌شود)
  • >> → افزودن به انتهای فایل (محتوای قبلی حفظ می‌شود)
  • 2> → ذخیره خطاها در فایل

▍ ذخیره خروجی ifconfig در فایل

┌──(ya3in㉿kali)-[~] └─$ ifconfig > network_info.txt

توضیح: خروجی ifconfig را در فایل network_info.txt ذخیره می‌کند. اگر فایل وجود نداشته باشد، ساخته می‌شود. اگر وجود داشته باشد، محتوای قبلی پاک می‌شود.

┌──(ya3in㉿kali)-[~] └─$ cat network_info.txt eth0: flags=4163 mtu 1500
inet 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::a00:27ff:fe4e:66a1 prefixlen 64 scopeid 0x20
ether 08:00:27:4e:66:a1 txqueuelen 1000 (Ethernet)
RX packets 12345 bytes 1234567 (1.2 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 6789 bytes 987654 (987.6 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73 mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
...

توضیح: با cat محتوای فایل ذخیره شده را نمایش می‌دهیم.

▍ چالش‌های رایج

• چالش اول: فراموش کردن فاصله

❌ اشتباه: بین دستور و > فاصله نذاشتن

ifconfig>network_info.txt

✅ درست:

ifconfig > network_info.txt

اگرچه در بسیاری از موارد کار می‌کند، اما برای خوانایی بهتر و جلوگیری از خطا، فاصله بگذارید.

• چالش دوم: فایل قبلی overwrite می‌شود

⚠️ مشکل: اگر فایل قبلاً وجود داشته باشد، > آن را پاک می‌کند.

┌──(ya3in㉿kali)-[~] └─$ echo "old content" > file.txt └─$ echo "new content" > file.txt └─$ cat file.txt new content

✅ راه‌حل: از >> برای افزودن به انتهای فایل استفاده کنید.

┌──(ya3in㉿kali)-[~] └─$ echo "old content" > file.txt └─$ echo "new content" >> file.txt └─$ cat file.txt old content
new content

• چالش سوم: خطاها در فایل ذخیره نمی‌شوند

⚠️ مشکل: اگر دستور خطا دهد، خطا در فایل ذخیره نمی‌شود.

┌──(ya3in㉿kali)-[~] └─$ ls /nonexistent > output.txt ls: cannot access '/nonexistent': No such file or directory

✅ راه‌حل: از 2> برای ذخیره خطاها در فایل استفاده کنید.

┌──(ya3in㉿kali)-[~] └─$ ls /nonexistent 2> error.txt └─$ cat error.txt ls: cannot access '/nonexistent': No such file or directory

▍ ذخیره خروجی و خطا با هم

┌──(ya3in㉿kali)-[~] └─$ ifconfig &> all_output.txt

توضیح: با &> هم خروجی و هم خطاها در یک فایل ذخیره می‌شوند.

┌──(ya3in㉿kali)-[~] └─$ ifconfig > output.txt 2>&1

توضیح: 2>&1 یعنی خطاها را به همان جایی که خروجی می‌رود (فایل output.txt) بفرست.

▍ مثال‌های کاربردی

┌──(ya3in㉿kali)-[~] └─$ ifconfig > network.txt 2>&1

ذخیره خروجی و خطاهای ifconfig در network.txt.

┌──(ya3in㉿kali)-[~] └─$ ifconfig | grep "inet" > ip_info.txt

فقط خطوط حاوی inet را با grep فیلتر کرده و در ip_info.txt ذخیره می‌کند.

┌──(ya3in㉿kali)-[~] └─$ ifconfig >> all_network.txt

خروجی ifconfig را به انتهای فایل all_network.txt اضافه می‌کند.

▍ خلاصه جدول

عملگر کاربرد مثال
> بازنویسی خروجی در فایل ifconfig > net.txt
>> افزودن خروجی به انتهای فایل ifconfig >> net.txt
2> ذخیره خطاها در فایل command 2> error.txt
2>> افزودن خطاها به انتهای فایل command 2>> error.txt
&> ذخیره خروجی و خطا در یک فایل command &> all.txt
> file 2>&1 خروجی و خطا به یک فایل (روش استاندارد) command > all.txt 2>&1
✅ تمرین پیشنهادی:
  • خروجی ifconfig را در فایل network.txt ذخیره کنید.
  • خروجی ifconfig را به انتهای همان فایل اضافه کنید.
  • با grep فقط خطوط حاوی inet را فیلتر کرده و در ip.txt ذخیره کنید.
  • یک دستور با خطا اجرا کنید و خطا را در error.txt ذخیره کنید.